import axios from 'axios'
import config from './config/index'

/* axios 封装 */
const service = axios.create({
  baseURL: process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro,
  timeout: 5000, //设置请求超时时间
})

//请求拦截器
service.interceptors.request.use((config) => {
  if (localStorage.getItem('token'))
    //每次请求时请求头里都携带token，后端根据请求头里的token判断登录是否过期等
    config.headers.token = this.$store.commit('getToken')
  return config
})

//响应拦截器
service.interceptors.response.use(
  (response) => {
    if (response.status !== 200) {
      this.$message.error('服务器忙，请稍后再试~')
      return
    }
    return response
  },
  //服务器状态码不是200的情况
  (error) => {
    if (error.response.status) {
      switch (error.response.status) {
        //401：未登录
        //未登录则跳转登录页面，并携带当前页面的路径
        //在登录成功后返回当前的页面
        case 401:
          router.replace({
            path: '/login',
            // query:{redirect:router.currentRoute.fullPath}
          })
          break
        //403: token 过期
        //登录过期对用户进行提示
        //清除本地 token 和清空 vuex 中 token 对象
        //跳转登录页面
        case 403:
          this.$message.error('登录过期，请重新登录')
          //清除 token
          this.$store.commit('clearToken')
          //跳转登录页面 OOTD::
          this.$router.push({ name: 'login' })
          break
        //404：请求不存在
        case 404:
          this.$message.error('网络请求不存在')
          break
        //其他错误，直接抛出错误提示
        default:
          this.$message({
            message: '资源不存在',
            type: error,
          })
      }
    }
    return Promise.reject(error)
  }
)
export default service
